﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using 坦克大战.Properties;

namespace 坦克大战
{
    class 我的坦克 : 移动物体
    {
        public int x出生 { get; set; }
        public int y出生 { get; set; }
        public bool b正在移动 { get; set; }
        public override void Update()
        {
            移动检查();
            移动();
            base.Update();

        }
        public void 移动()
        {
            if (b正在移动 == false) return;
            switch (F方向)
            {
                case 方向.上:
                    Y -= I速度;
                    break;
                case 方向.下:
                    Y += I速度;
                    break;
                case 方向.左:
                    X -= I速度;
                    break;
                case 方向.右:
                    X += I速度;
                    break;

            }
        }
        public void 移动检查()
        {
            #region 边界检测
            if (F方向 == 方向.上)
            {
                if (Y - I速度 < 0)
                {
                    b正在移动 = false;
                    return;
                }
            }
            else if (F方向 == 方向.下)
            {
                if (Y + I速度 + i高 > 450)
                {
                    b正在移动 = false;
                    return;
                }
            }
            else if (F方向 == 方向.左)
            {
                if (X - I速度 < 0)
                {
                    b正在移动 = false;
                    return;
                }
            }
            else if (F方向 == 方向.右)
            {
                if (X + I速度 + i宽 > 450)
                {
                    b正在移动 = false;
                    return;
                }
            }

            #endregion
            Rectangle r = 获得矩形();

            switch (F方向)
            {
                case 方向.上:
                    r.Y -= I速度;
                    break;
                case 方向.下:
                    r.Y += I速度;
                    break;
                case 方向.左:
                    r.X -= I速度;
                    break;
                case 方向.右:
                    r.X += I速度;
                    break;
                default:
                    break;
            }

            if (游戏管理者.是否碰撞墙(r) != null)
            {
                b正在移动 = false;
                return;
            }
            if (游戏管理者.是否碰撞钢铁(r) != null)
            {
                b正在移动 = false;
                return;
            }
            if (游戏管理者.是否碰撞boss(r))
            {
                b正在移动 = false;
                return;
            }

        }

        public 我的坦克(int x, int y, int 速度)
        {
            血量 = 1;
            this.X = x;
            this.Y = y;
            x出生 =150;
            y出生 = 420;

            this.I速度 = 速度;
            B上 = Resources.MyTankUp;
            B下 = Resources.MyTankDown;
            B右 = Resources.MyTankRight;
            B左 = Resources.MyTankLeft;
            this.F方向 = 方向.上;
          


        }

        public void 按键按下(KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.A:
                    F方向 = 方向.左;
                    b正在移动 = true;
                    break;
                case Keys.D:
                    F方向 = 方向.右;
                    b正在移动 = true;
                    break;
                case Keys.W:
                    F方向 = 方向.上;
                    b正在移动 = true;
                    break;
                case Keys.S:
                    F方向 = 方向.下;
                    b正在移动 = true;
                    break;
                case Keys.Space:
                    攻击();
                    break;

                default:
                    break;
            }
        }
        public void 攻击()
        {
            游戏音效.播放fire音效();
            int x = X;
            int y = Y;
            switch (F方向)
            {
                case 方向.上:
                    x += i宽 / 2;
                    break;
                case 方向.下:
                    x += i宽 / 2;
                    y += i高;
                    break;
                case 方向.左:
                    y += i高/2;

                    break;
                case 方向.右:
                    x += i宽;
                    y += i高 / 2; 
                    break;
                default:
                    break;
            }



            游戏管理者.创建子弹(x, y, F方向, Tag.我的坦克);


        }
        public void 按键抬起(KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.A:
                    F方向 = 方向.左;
                    b正在移动 = false;
                    break;
                case Keys.D:
                    F方向 = 方向.右;
                    b正在移动 = false;
                    break;
                case Keys.W:
                    F方向 = 方向.上;
                    b正在移动 = false;
                    break;
                case Keys.S:
                    F方向 = 方向.下;
                    b正在移动 = false;
                    break;

                default:
                    break;
            }
        }

        public int 血量 { set; get; }
        public void 受伤()
        {
            血量--;
            if (血量<=0)
            {
                血量 = 1;
                X = x出生;
               Y = y出生;
                F方向 = 方向.上;
            }
        }
    }
}
